﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://www.nowcoder.com/questionTerminal/c55f4f15cc3f4ff0adede7f9c69fa0c1
/*
题目描述：
链接：https://www.nowcoder.com/questionTerminal/c55f4f15cc3f4ff0adede7f9c69fa0c1
来源：牛客网

牛牛有一个数组，里面的数可能不相等，现在他想把数组变为：所有的数都相等。问是否可行。
牛牛可以进行的操作是：将数组中的任意一个数改为这个数的两倍。
这个操作的使用次数不限，也可以不使用，并且可以对同一个位置使用多次。

数据范围：数组大小满足
1
≤
𝑛
≤
50

1≤n≤50  ，数组中的数满足
1
≤
𝑣
𝑎
𝑙
≤
1
0
9

1≤val≤10
9


输入描述:
输入一个正整数N (N <= 50)
接下来一行输入N个正整数，每个数均小于等于1e9.


输出描述:
假如经过若干次操作可以使得N个数都相等，那么输出"YES", 否则输出"NO"
示例1
输入
2
1 2
输出
YES
示例2
输入
3
1 2 3
输出
NO
*/

#include <iostream>
using namespace std;
const int N = 55;
int nums[N];

// 核心思想：以数组中的最大值为基准，判断其他的所有数能不能以2次方的方式
// 编程这个最大值
bool check(int x) {
    int cnt = 0;
    while (x) {
        cnt++;
        x &= (x - 1);
        if (cnt > 1) {
            return false;
        }
    }
    return true;
}
int main() {
    int n = 0;
    scanf("%d", &n);
    int _max = -1;
    for (int i = 0; i < n; i++) {
        scanf("%d", &nums[i]);
        _max = max(_max, nums[i]);
    }
    for (int i = 0; i < n; i++) {
        if (nums[i] != _max) {
            if (_max % nums[i] || !check(_max / nums[i])) {
                cout << "NO" << endl;
                return 0;
            }
        }
    }
    cout << "YES" << endl;

    return 0;
}